package com.yadang.controller;

import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.net.MalformedURLException;
import java.nio.file.Path;
import java.nio.file.Paths;

/** 建表语句
 * id：主键INT类，并通过AUTO_INCREMENT指定自动递增。
 * major_business_name：大型业务名称，使用VARCHAR(255)表示
 * sub_business_name：子业务名称，使用`VARCHAR(VARCHAR(255)表示
 * minor_business_name：次级业务名称，使用`VARCHAR(VARCHAR(255)表示最大长度为255的可变字串。
 * download_flag：下载标签，使用`TINYINT(TINYINT(1)表示一个用于表示
 * file_name：文件名，使用`VARCHAR(255VARCHAR(255)表示最大长度为255的可变字串。
 * file_path：文件路径，使用VARCHAR(255)表示最大长度为255
 * last_modified_time：最后修改时间，使用`TIMTIMESTAMP显示日期和时间。
 *
 * CREATE TABLE business_files (
 *   id INT PRIMARY KEY AUTO_INCREMENT,
 *   major_business_name VARCHAR(255),
 *   sub_business_name VARCHAR(255),
 *   minor_business_name VARCHAR(255),
 *   download_flag TINYINT(1),
 *   file_name VARCHAR(255),
 *   file_path VARCHAR(255),
 *   last_modified_time TIMESTAMP
 * );
 */

@Controller
public class FileController {

    private static final String FILE_DIRECTORY = "/download/file/";

    @GetMapping("/file/{filename:.+}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String filename) {
        try {
            // 构建文件路径
            Path filePath = Paths.get(FILE_DIRECTORY).resolve(filename);
            Resource resource = new UrlResource(filePath.toUri());
            // 检查文件是否存在并可读
            if (resource.exists() && resource.isReadable()) {
                // 设置响应头信息
                HttpHeaders headers = new HttpHeaders();
                headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
                // 返回文件资源作为响应
                return ResponseEntity.ok()
                        .headers(headers)
                        .body(resource);
            } else {
                // 文件不存在或不可读
                return ResponseEntity.notFound().build();
            }
        } catch (MalformedURLException e) {
            // 处理URL异常
            //ResponseEntity.status(HttpStatus.NOT_FOUND).body("");
            return ResponseEntity.badRequest().build();
        }
    }
}
